[Immuta] グローバルサブスクリプションポリシーを設定して特定のユーザーには特定のデータしか使えないようにする
大阪オフィスの玉井です。
データガバナンスの観点において、「XXの人には、YYのデータしかアクセスさせない」というポリシーを定めなければいけない場面があると思います。ポリシーを適用しなければいけないデータが完全に固定であれば、まだなんとかなりそうですが、ポリシーによっては、今後追加されるであろう「未来のデータ」についても、色々とポリシーを適用し続けなければいけない場面もあるかと思います。
そういう場合、Immutaのグローバルサブスクリプションポリシーを使用すると、GUIでポチポチするだけで、上記のようなガバナンスを効かせることができるようになります。
Immutaって何?
下記を参照。
グローバルサブスクリプションポリシーとは
Immutaにおけるデータポリシー
そもそも、Immutaには、いくつかの種類のポリシーがあります。
- グローバルポリシー
- グローバルサブスクリプションポリシー
- グローバルデータポリシー
- ローカルポリシー
- ローカルサブスクリプションポリシー
- ローカルデータポリシー
グローバルポリシーは、指定した条件に該当する全てのデータソースを対象にするポリシーです。対して、ローカルポリシーは、特定のデータソースだけに適用するポリシーです。
グローバルポリシーの場合、条件に該当するのであれば、設定以降に追加されるデータソースにも動的に適用されます。全体ルールのような形で一度設定しておけば、新しいデータに対して毎回設定し直す必要はありません。
グローバルサブスクリプションポリシー
「グローバル」の意味は上記の通りですが、「サブスクリプションポリシー」とは何でしょうか。
サブスクリプションポリシーとは、「(あるユーザー・グループに対して)そのデータソース自体にアクセスさせるかどうか」を決めます。これに「グローバル」がつくとどうなるか。つまり、グローバルサブスクリプションポリシーとは、「(あるユーザー・グループに対して)指定した条件に該当するデータソースを見せる見せないを決めるルール」のようなもの、といえます。
ちなみに、データポリシーは、データソースの中の話になります。例えば「XというカラムはYというグループのユーザーにしか見せない」とか「Zというカラムは個人情報なのでハッシュ化してマスキングする」とか、データ単位のルールを決めます。
やってみた
やってみる内容の概要
「開発者ユーザーをImmutaに追加するが、そのユーザーは開発者なので、開発者用のデータソースしか使用できないようにする(本番データは使わせない)」ということをやってみます。
ユーザーの追加
まず、開発者(という体)のユーザーを追加します。AdminのメニューからNew Userを選択します。
登録するユーザーの情報を入力します。このユーザーは、管理者ではなく、いちユーザー扱いなので、RoleはOrganization Userを選びます。
登録されました。
グループを作成してユーザーを入れる
グループは必須ではありませんが、グループ単位でポリシーを設定しておけば、今後新しいユーザーを追加したとき、グループに追加するだけで(そのユーザーに)同じポリシーを適用できるので、グループを作っておくほうが楽です。
Adminメニューからグループ作成を選びます。
グループの情報を入れます。
グループを作ると、そのグループの詳細画面に移動します。そこからそのままユーザー追加ができます。
グループにAttributeを設定する
「このグループは開発者グループである」ということをImmuta上で定義するために、Attributeをつけます。Immutaのポリシーは、このAttributeを利用して色々と設定できるようになっています。
グループの詳細画面から「Add Attribute」を選びます。
今回はEnvironmentという名前のAttributeを作成します。そして、このグループのEnvironmentの値を「Dev」とします。
タグを作成してデータソースに付ける
次に、データソースに適用する「タグ」を作成します。
Governanceメニューからタグ作成画面に移動します。
Environmentというタグを用意し、DevとProdという2つの値を用意します(Prodは何となく用意しただけで、今回は使いません)。
作成したタグをデータソースにつけます。今回はあるデータソースを「開発者用データソース」という体で登録します。
適用したいデータソースの画面に移動し、Add Tagsを選択します。
検索画面から、先ほど作成したタグ(Dev)を見つけて、設定します。
グローバルサブスクリプションポリシーを作成する
事前準備が一通り終わったところで、いよいよグローバルサブスクリプションポリシーを作成します。
Policyメニューからサブスクリプションポリシー作成画面に移動します。
サブスクリプションポリシーの作成画面です。まず、「誰にアクセスを許可するか?」という設定を行います。今回はDevというAttributeがついたグループ(先程作成したグループ)に許可したいので、「Allow users with specific groups/attributes」を選びます。
次は、具体的に「どのAttributeが何の値だったら許可する?」を設定します。先程設定したEnvironmentというAttributeを選びます。値はもちろんDevです。
最後に、「今までの条件を満たしたユーザーにアクセスさせるデータソースは何?」を設定します。今回は「Devというタグがついたデータソース」を指定します。この設定により、今後追加されるデータソースに対しても、Devというタグさえつければ、このサブスクリプションポリシーが効くようになります。
ポリシーの効果を確認する
それでは、実際に開発者用ユーザーでログインして、データソースがどう見えるのか確認します。
まず「My Data Sources」を確認します。Devというタグがついたデータソースしかありません。問題ないですね。
次に「All Data Sources」を確認します。色々なデータソースが表示されますが、右にGet Accessというメニューが表示されています。
これを選択すると、「あなたは許可されてないからアクセスできないよ」というダイアログが表示されます。Devタグが付いてないデータソースは全てこのようになっていました。
クエリ発行画面も見てみます。Devタグがついたデータソースしか表示されません。
ちなみに、管理者(制限なし)だと、全データソースがクエリ可能です。
おわりに
今回のような内容以外にも、もっと細かいルールを設定できますので、きめ細やかなデータガバナンスを行いたい場合でもImmutaで解決できると思います。